2  Agregar partes a una tabla simple

Con la librería gt podemos personalizar la tabla como deseemos. A continuación podemos apreciar un ejemplo de la estructura de una tabla creada con gt

Partes de una gt Table

Partes de una gt Table

Las partes son:

Para incluir cada una de estas partes se utiliza la familia de las funciones tab_*().

2.1 Título y subtítulo (Table header)

Para agregar un encabezado a nuestra tabla usamos la función tab_header() y así podemos incluir títulos y subtítulos de ser necesario.

Antes nuestra tabla se veía así

Nombre Tamaño
Asia 16988
Africa 11506
North America 9390
South America 6795
Antarctica 5500
Europe 3745
Australia 2968
Greenland 840
New Guinea 306
Borneo 280

Figura 2.1: Tabla básica de islands

Agregamos un título y un subtítulo, y Figura 2.1 se visualiza así

gt_tbl1 <- 
  gt_tbl |>
  tab_header(
    title = "Grandes masas de tierra del mundo",
    subtitle = "Top 10 de las más grandes"
  ) 

# Visualizamos la tabla
gt_tbl1
Grandes masas de tierra del mundo
Top 10 de las más grandes
Nombre Tamaño
Asia 16988
Africa 11506
North America 9390
South America 6795
Antarctica 5500
Europe 3745
Australia 2968
Greenland 840
New Guinea 306
Borneo 280

Figura 2.2: Agregar un título y un subtítulo a la tabla

Para personalizar nuestro libro es posible utilizar la función tab_style() y usaremos la función de ayuda cell_text() para, por ejemplo, cambiar el tipo de letra de toda la columna Nombre a itálica. Para esto agregamos al código anterior:

gt_tbl1 <- 
  gt_tbl1 |>
  tab_style(
    style = cell_text(style = "italic"), # Indicamos que queremos que la letra sea itálica
    locations = cells_body(
      columns = Nombre # Indicamos la columna en la que se desea estilizar la letra
  ))

# Visualizamos la tabla
gt_tbl1
Grandes masas de tierra del mundo
Top 10 de las más grandes
Nombre Tamaño
Asia 16988
Africa 11506
North America 9390
South America 6795
Antarctica 5500
Europe 3745
Australia 2968
Greenland 840
New Guinea 306
Borneo 280

Modificación del estilo de letra de la columna nombres

Es posible personalizar aún más el estilo de la tabla y agregarle muchas más cosas usando las funciones de referencia (?sec-funcref).

2.3 Grupos de filas (Stub)

Un Stub es la parte izquierda de la fila donde se encuentran los nombres de las filas o los nombres de los grupos de filas. El término Stub Head hace referencia al “título” de los stubs de la tabla.

En la librería gt es necesario especificar cuál es la columna que tiene los “nombres” de las filas. En nuestro ejemplo, el tibble islands_tbl tiene DOS columnas, debemos especificar que la columna Nombre tiene los nombres de las filas y a partir de ella formaremos los stubs, y que la columna size es la única columna, esto lo hacemos con la función gt() y el argumento rowname_col así

gt_tbl5 <- 
  islands_tbl |>
  gt(rowname_col = "Nombre")

gt_tbl5
Tamaño
Asia 16988
Africa 11506
North America 9390
South America 6795
Antarctica 5500
Europe 3745
Australia 2968
Greenland 840
New Guinea 306
Borneo 280

Figura 2.3: Tabla con a columna Nombre como stub

Sin embargo, tal como podemos observar en Figura 2.3, la letra de la columna nombres ya no es itálica, de modo que hemos perdido el estilo que dimos en ?fig-italica.Ahora sí podemos formar los grupos de filas y asignar los stubs. Iniciamos con el stub head al que llamaremos “Masa terrestre” con la función tab_stubhead() así

gt_tbl6 <- 
  gt_tbl5 |>
  tab_stubhead(label = "Masa terrestre")

gt_tbl6
Masa terrestre Tamaño
Asia 16988
Africa 11506
North America 9390
South America 6795
Antarctica 5500
Europe 3745
Australia 2968
Greenland 840
New Guinea 306
Borneo 280

Tabla con un nombre para los stubs

A continuación, agrupamos las filas y asignamos el correspondiente stub con la función tab_row_group()

gt_tbl7 <- 
  gt_tbl6 |> 
  tab_row_group(
    label = "Continente",
    rows = 1:6
  ) |>
  tab_row_group(
    label = "País",
    rows = c("Australia", "Greenland")
  ) |>
  tab_row_group(
    label = "Subregión",
    rows = c("New Guinea", "Borneo")
  )

# Visualizamos la tabla
gt_tbl7
Masa terrestre Tamaño
Subregión
New Guinea 306
Borneo 280
País
Australia 2968
Greenland 840
Continente
Asia 16988
Africa 11506
North America 9390
South America 6795
Antarctica 5500
Europe 3745

Ahora agregamos los otros elementos de la tabla y nos queda

gt_tbl8 <- 
  gt_tbl7 |> 
  tab_header(
    title = "Grandes masas de tierra del mundo",
    subtitle = "Top 10 de las más grandes"
  ) |>
  tab_source_note(
    source_note = "Recurso: The World Almanac and Book of Facts, 1975, página 406."
  ) |>
  tab_source_note(
    source_note = "Referencia: McNeil, D. R. (1977) Interactive Data Analysis. Wiley."
  ) |>
  tab_footnote(
    footnote = "El tamaño es mayor que 6000 y menor que 16000",
    locations = cells_body(columns = Tamaño, rows = Tamaño>6000 & Tamaño<16000)
  ) |>
opt_footnote_marks(marks = c("*", "+"))

# Visualizamos la tabla
gt_tbl8
Grandes masas de tierra del mundo
Top 10 de las más grandes
Masa terrestre Tamaño
Subregión
New Guinea 306
Borneo 280
País
Australia 2968
Greenland 840
Continente
Asia 16988
Africa * 11506
North America * 9390
South America * 6795
Antarctica 5500
Europe 3745
Recurso: The World Almanac and Book of Facts, 1975, página 406.
Referencia: McNeil, D. R. (1977) Interactive Data Analysis. Wiley.
* El tamaño es mayor que 6000 y menor que 16000

Otra forma, tal vez un poco más sencilla, para generar los stubs es cuando en la base de datos original existe una columna con los nombres de los grupos de las filas, en el ejemplo, que en islands_tbl existiera la columna nombre_grupos donde aparecen Subregión, Continente y País, de modo que no sería necesario usar la función tab_row_group() para formar cada grupo, sino que simplemente usaríamos el siguiente fragmento del código: “gt(islands_tbl, rowname_col = "name", groupname_col = "nombre_grupos") |> ...”.

2.4 Grupos de columnas (Spanner)

Así como en la sección anterior hicimos grupos de filas y les pusimos nombres a dichos gurpos, también es posible crear grupos de filas y asignarles títulos utilizando la función tab_spanner(), dichos grupos se conocen como Spanner.

Para mostrar un ejemplo, usaremos los datos disponibles en airquality , esta base de datos tiene registro del día, mes y las mediciones de la calidad del aire en Nueva York de 153 días entre Mayo a Septiembre de 1973, tiene variables como ozono, radiación solar, temperatura, entre otras. Para ilustrar el uso de la función tab_stanner(), vamos a crear dos grupos de columnas, uno asociado a las mediciones (ozono, radiación solar, temperatura, …) y otro relacionado con la fecha de registro.

# Primero vamos a cambiar a español los nombres de las variables de la base de datos "airquality"
calidad_aire<-airquality |>
  slice(1:10)

names(calidad_aire)<-c("Ozono","R.Solar","Viento","Temp","Mes","Día")

# Creamos la tabla con gt
gt_tbl_air <- 
  gt(calidad_aire) |>
  tab_header(
    title = "Mediciones de la calidad del aire en Nueva York",
    subtitle = "Mediciones diarias en Nueva York de mayo a septiembre de 1973"
  ) |>
  # Aquí creamos el primer grupo de columnas refererentes a la fecha
  tab_spanner(
    label = "Fecha", # Agregamos el título del grupo de columnas
    columns = c(Mes, Día) # Seleccionamos las columnas que se van a agrupar en "Fecha"
  ) |>
  tab_spanner(
    label = "Mediciones",
    columns = c(Ozono, R.Solar, Viento, Temp)
  )

# Visualizamos la tabla
gt_tbl_air
Mediciones de la calidad del aire en Nueva York
Mediciones diarias en Nueva York de mayo a septiembre de 1973
Mediciones Fecha
Ozono R.Solar Viento Temp Mes Día
41 190 7.4 67 5 1
36 118 8.0 72 5 2
12 149 12.6 74 5 3
18 313 11.5 62 5 4
NA NA 14.3 56 5 5
28 NA 14.9 66 5 6
23 299 8.6 65 5 7
19 99 13.8 59 5 8
8 19 20.1 61 5 9
NA 194 8.6 69 5 10

La librería gt nos permite cambiar de posición la disposición de las columnas, así como también modificar los nombres de las columnas. Para cambiar de posición se puede usar la función cols_move_to_*(), y para los nombres de las columnas cols_label(). Por ejemplo, vamos a mover todas las variables relacionadas con Fecha al comiezo de la tabla (a la izquierda), y vamos a agregar las unidades de medida al nombre de las columnas.

gt_tbl_air_2 <- 
  gt_tbl_air |>
  cols_move_to_start(
    columns = c(Mes, Día)
  ) |>
  cols_label(
    Ozono = html("Ozono,<br>ppbV"),
    R.Solar = html("R.Solar,<br>cal/m<sup>2</sup>"),
    Viento = html("Viento,<br>mph"),
    Temp = html("Temp,<br>&deg;F")
  )

# Visualización de la tabla 
gt_tbl_air_2
Mediciones de la calidad del aire en Nueva York
Mediciones diarias en Nueva York de mayo a septiembre de 1973
Fecha Mediciones
Mes Día Ozono,
ppbV
R.Solar,
cal/m2
Viento,
mph
Temp,
°F
5 1 41 190 7.4 67
5 2 36 118 8.0 72
5 3 12 149 12.6 74
5 4 18 313 11.5 62
5 5 NA NA 14.3 56
5 6 28 NA 14.9 66
5 7 23 299 8.6 65
5 8 19 99 13.8 59
5 9 8 19 20.1 61
5 10 NA 194 8.6 69

Es considerablemente grande la cantidad de cosas que podemos agregar a nuestra tabla. En este capítulo (Capítulo 2) vimos cómo agregar partes “básicas” a la tabla. Pero también podemos agregar muchas más cosas usando las funciones de referencia que puedes estudiar en ?sec-funcref.